package cn.cjxy.javaweb.servlet.cookie;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 *
 * cookie的传递过程
 *  ● cookie的传递会经过下边这4步：
 *   ○ 1）Client发送HTTP请求给Server，Server判断本次请求是否有携带Cookie
 *   ○ 2）没有携带Cookie，则Server会在本次响应头中携带Set-Cookie响应头，Cookie信息就存在这个响应头中
 *   ○ 3）Client读取本次响应头中的Set-Cookie数据，创建一个Cookie并将Cookie的值存储到浏览器中，之后请求Server会将Cookie的数据读出来放在请求体头中（请求头的名称就叫Cookie）
 *   ○ 4）Server从请求头中获取Cookie信息，来判断是否是上一个人；
 *      Cookie实际上是一小段的文本信息（key-val键值对格式）
 *         客户端向服务器发起请求，如果服务器需要记录该用户状态，就用response向客户端发送一个Cookie。
 *         客户端浏览器会把Cookie保存起来。当浏览器再次向网站发送请求时，浏览器会把请求的网址和Cookie一起提交给服务器。服务器检查该Cookie，以此来辨别用户状态。
 *
 *       ● Cookie相关方法：
 *  Cookie类的方法	作用
 *  Cookie(String name,String value)	通过构造方法创建一个Cookie 参数：键和值，都是String类型
 *  String getName()	得到Cookie的键
 *  String getValue()	得到Cookie的值
 *      ● 本次响应中添加Cookie
 *  HttpServletResponse对象	作用
 *  addCookie(Cookie cookie)	将服务器创建的Cookie通过响应发送给浏览器 参数：创建好的Cookie对象
 *
 *  cookie创建后，是存储在客户端磁盘中（每个浏览器的存储位置不一样），在默认情况下，浏览器关闭之后，Cookie就销毁了；
 *
 *  Cookie设置过期时间	说明
 * void setMaxAge(int expiry)	设置会话过期的时间，单位是秒 正数：设置秒数 负数：无效，浏览器关闭就失效 零：删除Cookie
 * @author huangjie
 * @date 2025/9/29
 */
@WebServlet("/cookiedemo1")
public class CookieDemo1 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建cookie对象
        Cookie cookie1 = new Cookie("user", "张三");
        Cookie cookie2 = new Cookie("age", "22");
        //cookie.setMaxAge(30);
        //写到浏览器哦
        resp.addCookie(cookie1);
        resp.addCookie(cookie2);

        //在网页给个提示
        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().println("像浏览器写入了一个cookie");
    }
}
